#pragma once

#include "Instruction.h"
#include "Value.h"

///
/// @brief 类型转换指令
///
class CastInstruction : public Instruction {
private:
    Value * source;  // 源操作数
    Type * targetType;  // 目标类型

public:
    /// @brief 构造函数
    /// @param _func 所属函数
    /// @param _source 源操作数
    /// @param _targetType 目标类型
    CastInstruction(Function * _func, Value * _source, Type * _targetType);

    /// @brief 获取源操作数
    /// @return 源操作数
    Value * getSource() const;

    /// @brief 获取目标类型
    /// @return 目标类型
    Type * getTargetType() const;

    /// @brief 转换成字符串
    void toString(std::string & str) override;
};